function group() {
    let canvas = document.getElementById("_canvas");
    let ctx = canvas.getContext("2d");
    let engine = new Engine(ctx);
    let layer = new Layer(ctx);


    function EnemyRect(layer) {
        let enemy = new RectObject();
        this.owner = enemy;
        enemy.width = 50;
        enemy.height = 50;
        enemy.position = new Position(100, 100);
        layer.addObject(enemy);
    }

    layer.create = function () {
        let all = new GroupObject();
        all.addComponent(new GameComponent.WSADMove(15));
        all.addComponent(new GameComponent.LookAtMouse());
        all.speed = 20;

        let baseX = 300;
        let baseY = 400;

        let gun = new EnemyRect(layer);
        gun.owner.width = 200;
        gun.owner.height = 20;
        gun.owner.position = new Position(baseX - gun.owner.width / 2, baseY - gun.owner.height / 2);
        gun.owner.addComponent(new GameComponent.Shot(function () {
            let bullet = new ArcObject(10); 
            layer.addObject(bullet);
            return bullet;
        }, function () {
            return Input.mouse_down_check('left');
        }, 100, 10));

        let body = new RectObject();
        body.radius = 50;
        body.width = 80;
        body.height = 100;
        body.position = new Position(baseX - body.width / 2, baseY - body.height / 2);
        layer.addObject(body);

        let part1 = new BallArc(layer);
        part1.owner.radius = 25;
        part1.owner.position = new Position(baseX, baseY);

        let part2 = new BallArc(layer);
        part2.owner.position = new Position(baseX, baseY + 80);
        part2.owner.addComponent(new GameComponent.Surround(part1.owner, 80));

        layer.addObject(all);
        all.addObject(gun.owner);
        all.addObject(body);
        all.addObject(part1.owner);
        all.addObject(part2.owner);
    }
    engine.addLayer(layer);
    engine.run();
    return engine;
}